<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
<script type="text/javascript" src="js/JnPakg.js"></script>
<script type="text/javascript">
(function(){
	dw("08_prototype的继承[4].html");
})();


//实现继承有两种方法,一种是构造继承法,一种是原型继承法
var A = function(_size){
	dw("A的构造方法被执行了"+A.caller)
	var n = _size;
	this.size = function(){return n;}
}
A.prototype.maxSize = function(){return "max : "+this.size();}
A.prototype.x = 5;

/**混合继承[最类似于java的继承.继承动态公共变量和公共方法,原型变量和原型方法.]
**/
var B1 = function(_size){
	dw("B1的构造方法被执行了" + B1.caller);
	
	//这其实就是一下这一句话的源码.
	/**
	这个说法有误:
	 1.下面的代码附加动态和原型两种参数和方法,而call值附加动态参数和方法
	 2.并不是如此附加的而是吧this代替A中的this来运行一遍A的构造方法
	**/
	/** 
	var a1 = new A(_size)
	for(var i in a1){
		this[i] = a1[i];
	}
	**/
	A.call(this, _size);
	//A.apply(this, _size);
}
B1.prototype = new A(); //B1是通过一个A的实例来创建的但是,B1内部又构建了一个A,将A1的各个方法代理到了B1
B1.prototype.y = 6;

var b1 = new B1(7);
dw(b1.x);
dw(b1.y);
dw("B1.maxSize()" + b1.maxSize());
if(b1 instanceof B1){
	dw("b1是B1")
}else{
	dw("否")
}
if(b1 instanceof A){
	dw("b1是A")
}else{
	dw("否")
}
dw.dl();

var a1 = new A(15);
dw("a1.y : "+a1.y);

//继承有构造继承,原型继承,实例继承,拷贝继承.
//混合继承.


</script>
</html>